iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
Web 3

I have an AI ,I have a React, Ugh ,AI -React 系列 第 17

[Day17] 鐵人賽過半了 來聽聽音樂吧

  • 分享至 

  • xImage
  •  

咒語:使用mui組件建立一個音樂撥放器 並且包含上傳按鈕 用上傳的不要路徑 播放邏輯(再按一次可暫停)/音樂進度條/音量進度條 內容以繁體中文表示 不使用react-audio-player

import React, { useState, useRef } from "react";
import {
  Box,
  Button,
  Container,
  Slider,
  Typography,
} from "@mui/material";

const MusicPlayer = () => {
  const [isPlaying, setIsPlaying] = useState(false);
  const [volume, setVolume] = useState(0.5);
  const audioRef = useRef(null);

  const togglePlay = () => {
    if (isPlaying) {
      audioRef.current.pause();
    } else {
      audioRef.current.play();
    }
    setIsPlaying(!isPlaying);
  };

  const handleVolumeChange = (event, newValue) => {
    setVolume(newValue);
    audioRef.current.volume = newValue;
  };

  const handleFileChange = (event) => {
    const file = event.target.files[0];
    if (file) {
      const objectURL = URL.createObjectURL(file);
      audioRef.current.src = objectURL;
      audioRef.current.play();
      setIsPlaying(true);
    }
  };

  return (
    <Container>
      <Box my={4}>
        <audio ref={audioRef} src="" controls></audio>
      </Box>
      <Box display="flex" alignItems="center">
        <Button
          variant="contained"
          color={isPlaying ? "secondary" : "primary"}
          onClick={togglePlay}
        >
          {isPlaying ? "暂停" : "播放"}
        </Button>
        <input
          type="file"
          accept="audio/*"
          onChange={handleFileChange}
          style={{ display: "none" }}
          id="audio-file"
        />
        <label htmlFor="audio-file">
          <Button variant="contained" component="span">
            上载音乐
          </Button>
        </label>
      </Box>
      <Box my={4}>
        <Typography id="volume-slider" gutterBottom>
          音量
        </Typography>
        <Slider
          value={volume}
          onChange={handleVolumeChange}
          aria-labelledby="volume-slider"
          min={0}
          max={1}
          step={0.01}
        />
      </Box>
    </Container>
  );
};

export default MusicPlayer;

這次mui的功能用的比較少 居然靠html5 audio就完成部份了
只能查看邏輯跟音量動態


上一篇
[Day16] 人總是要聊天的 留個言吧
下一篇
[Day 18] 小犬颱風要來了 來看一下天氣吧
系列文
I have an AI ,I have a React, Ugh ,AI -React 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言